/**
* В том файле хранятся функции работы с канвой
* Все рисование, даже самое малюсенькое, писать сюда, а в логике вызывать функцию.
*/

function at(){
	alert("ololo")
}
function GraphicAdapter(game, canvas){
	
	var _timeOut = 50; // время задержки между отрисовками
	var _zoom = 10; //количество делений в одном пикселе
	var _game = game;
	var prop = game.getProp();
	var _canvas = canvas;	
	
	this.setZoom = function(value){
		_zoom = value;
		this.adaptCanvasSize();
		drawAll();
	}
	
	this.zoomPlus = function(){
		_zoom *= 0.95;
		this.adaptCanvasSize();
		drawAll();
		return false;
	}
	
	this.zoomMinus = function(){
		_zoom *= 1.05;
		this.adaptCanvasSize();
		drawAll();
		return false;
	}
	
	this.adaptCanvasSize = function(){
		_canvas.width = prop.width/_zoom;
		_canvas.style.width = prop.width/_zoom;
		_canvas.height =  prop.height/_zoom;
		_canvas.style.height =  prop.height/_zoom;
		_canvas.style.marginLeft = -  prop.width/_zoom/2;
	}
	
	// получаем канву
	var drawSpace = _canvas.getContext("2d");
	this.adaptCanvasSize();
	
	// добавляем обработчик клика, инициирующий реактивное движение
	canvas.onmousedown = function(event) {
		var sph = _game.list[0];
		if(sph.sphType == "active") {
			var X = event.offsetX*_zoom - sph.pos.x;
			var Y = event.offsetY*_zoom - sph.pos.y;
			_game.list[0].generate(X, Y);
		}
	}
	
	var timer = setInterval(drawAll, _timeOut);
	
	// главный метод отрисовки, вызываемый в цикле сюда писать всю графику
	function drawAll(){
		drawSpace.clearRect(0, 0, _canvas.width, _canvas.height);
		// рисуем все из списка, эта часть кода должна быть последней
		for (var i = 0; i < _game.list.length; i++) {
			switch (_game.list[i].sphType) {
				case "passive":
					if(_game.list[i].rad > _game.list[0].rad)
						drawGrandPassiveSphere(_game.list[i]);
					else
						drawPetitPassiveSphere(_game.list[i]);
					break;
				case "active":
					drawActiveSphere(_game.list[i]);
					break;
				default:
					alert("ERROR: Mistical object in list.");
			}
		}
	}
	
	function drawPetitPassiveSphere(obj){
		if(obj.rad <= 0) return;
		drawSpace.strokeStyle = "rgba(200, 200, 200, 0.5)";
	    drawSpace.fillStyle = "rgb(30,120,255)";
	    drawSpace.beginPath();
	    drawSpace.arc(obj.pos.x/_zoom, obj.pos.y/_zoom, obj.rad/_zoom, 0, 2*Math.PI, false);
	    drawSpace.lineWidth = 2;
		drawSpace.closePath();
	    drawSpace.fill();
	    drawSpace.stroke();
	}
	
	function drawGrandPassiveSphere(obj){
		if(obj.rad <= 0) return;
		drawSpace.strokeStyle = "rgba(200, 200, 200, 0.5)";
	    drawSpace.fillStyle = "rgb(120,30,255)";
	    drawSpace.beginPath();
	    drawSpace.arc(obj.pos.x/_zoom, obj.pos.y/_zoom, obj.rad/_zoom, 0, 2*Math.PI, false);
	    drawSpace.lineWidth = 2;
		drawSpace.closePath();
	    drawSpace.fill();
	    drawSpace.stroke();
	}
	
	function drawActiveSphere(obj){
		if(obj.rad <= 0) return;
		drawSpace.strokeStyle = "rgba(200, 200, 200, 0.5)";
	    drawSpace.fillStyle = "rgb(255,144,30)";
	    drawSpace.beginPath();
	    drawSpace.arc(obj.pos.x/_zoom, obj.pos.y/_zoom, obj.rad/_zoom, 0, 2*Math.PI, false);
	    drawSpace.lineWidth = 2;
		drawSpace.closePath();
	    drawSpace.fill();
	    drawSpace.stroke();
	}
}
